/*current_scan_transformed_ptr_
 * @Description: 点云匹配模块的基类
 * @Author: Zhijian Qiao
 * @Date: 2020-02-08 21:25:11
 */
#ifndef avp_slam_MODELS_REGISTRATION_INTERFACE_HPP_
#define avp_slam_MODELS_REGISTRATION_INTERFACE_HPP_

#include <Eigen/Dense>
#include <yaml-cpp/yaml.h>
#include "sensor_data/cloud_data.hpp"

namespace avp_slam {
    class RegistrationInterface {
    public:

        EIGEN_MAKE_ALIGNED_OPERATOR_NEW;

        virtual ~RegistrationInterface() = default;

        virtual bool SetInputTarget(const CloudData::CLOUD_PTR &input_target) = 0;

        virtual Eigen::Matrix4f ScanMatch(const CloudData::CLOUD_PTR &input_source,
                                          const Eigen::Matrix4f &predict_pose,
                                          CloudData::CLOUD_PTR &result_cloud_ptr) = 0;

        virtual float GetFitnessScore() = 0;

//        虚函数 你
        virtual bool GetHasConverged() = 0;
    };
}

#endif